package com.zhike.service.messages;

import java.util.List;

import com.zhike.common.dto.ChatSessionMessageDTO;
import com.zhike.common.dto.GroupAtUserForSessionDTO;
import com.zhike.common.model.ChatSession;
import com.zhike.common.repository.HistoryMessage;
import com.zhike.common.vo.ChatSessionVO;

public interface IChatSessionService {

    /**
     * 查询用户会话列表
     * 
     * @param uid 当前登录uid
     * @return
     */
    public List<ChatSessionVO> queryUserChatSession(String uid) throws Exception;

    /**
     * 初始化群会话(创建群时调用)
     * 
     * @param groupId
     * @return
     */
    public String initGroupSession(String groupId);

    /**
     * 初始化群成员会话
     * 
     * @param groupId
     * @param uid
     */
    public void initGroupMemberSession(String groupId, String uid);

    /**
     * 更新聊天内容
     * 更新最后一条信息/时间/目标用户昵称/群名称/消息类型
     * 
     * @param dto
     * @return
     */
    public String updateUserChatSession(ChatSessionMessageDTO dto);

    /**
     * 创建会话(单聊)
     * 
     * @param fromUid
     * @param toUid
     * @return sessionId
     */
    public String createSession(String fromUid, String toUid);

    /**
     * 创建群会话
     * 
     * @param fromUid    当前登录uid
     * @param groupId    群ID
     * @param lastMsgUid 最新一条消息的发送人UId
     * @return sessionId
     */
    public boolean createGroupSession(HistoryMessage hm, String groupName, String lastMsgUid);

    /**
     * 创建群会话
     *
     * @param fromUid    当前登录uid
     * @param groupId    群ID
     * @param lastMsgUid 最新一条消息的发送人UId
     * @return sessionId
     */
    public boolean createGroupSession2(HistoryMessage hm, String groupName, String lastMsgUid, String memberId);

    /**
     * 获取与好友的会话ID
     */
    public String getSessionIdWithFriend(String fakeUid, String friendUid);

    /**
     * 会话置顶
     * 
     * @param dto
     * @return
     */
    public boolean chatSessionTop(String sessionId, String fromUid, Integer action);

    /**
     * 删除会话
     * 
     * @param dto
     * @return
     */
    public boolean deleteSession(String fromUid, String toUid, String toGid);

    /**
     * 删除群会话（群解散）
     * 
     * @param groupId
     * @return
     */
    public boolean deleteGroupAllSession(String groupId);

    // 更新会话
    public boolean updateLastSession(HistoryMessage msg);

    /**
     * 查询会话
     * 
     * @param fakeUid
     * @param friendUid
     * @return
     */
    ChatSession selectChatSession(String fakeUid, String friendUid);

    /**
     * 查询群会话
     * 
     * @param fakeUid
     * @param groupId
     * @return
     */
    ChatSession selectGroupSession(String fromUid, String groupId);

    /**
     * 查询会话列表
     */
    List<ChatSession> selectGroupSession(String groupId);

    /**
     * 更新群会话
     * 
     * @param fromUid
     * @param groupId
     * @param lastMsgUid 最新一条消息的发送人UId
     * @return
     */
    Boolean updateGroupSession(HistoryMessage vo, String groupName, String lastMsgUid);

    /**
     * 更新群会话
     */
    Boolean updateGroupSession2(HistoryMessage vo, Long id, String groupName, String lastMsgUid);

    /**
     * 更新通知消息数
     * 
     * @param groupId
     * @param userIds
     * @param count
     */
    void updateNotifyCount(String groupId, List<String> userIds, int count);

    /**
     * 消息免打扰
     * 
     * @param sessionId
     * @param action
     * @return
     */
    Boolean nodisturb(String sessionId, String uid, Integer action);

    /**
     * 更新群会话@
     * 
     * @return
     */
    Boolean updateSessionAt(GroupAtUserForSessionDTO dto, Integer at);
}
